﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;


    public static class CoRegular
    {

        #region Regular Expression

        /// <summary>
        /// 校验字符串是否只包含字母与数字
        /// </summary>
        /// <param name="toVerified">需要校验的字符串</param>
        /// <returns>true表示符合要求，false表示不符合要求</returns>
        public static bool IsOnlyLetterAndDigit(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"^[a-zA-Z0-9-]*$");
            return rx.IsMatch(str.Trim(), 0);
        }

        /// <summary>
        /// 校验字符串是否只包含字母
        /// </summary>
        /// <param name="toVerified">需要校验的字符串</param>
        /// <returns>true表示符合要求，false表示不符合要求</returns>
        public static bool IsOnlyLetter(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"^[a-zA-Z-]*$");
            return rx.IsMatch(str.Trim(), 0);
        }

        /// <summary>
        /// 检验是否是整数
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为整数：true是整数，false非整数</returns>
        public static bool IsInt(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
        
            Regex rx = new Regex(@"^[0123456789]+$");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 校验是否为正的浮点数
        /// </summary>
        /// <param name="price">需要检验的字符串</param>
        /// <returns>是否为正浮点，是返回true，否则返回false</returns>
        public static bool IsFloat(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;

            Regex rx = new Regex(@"^[0-9]*(.)?[0-9]+$", RegexOptions.IgnoreCase);
            return rx.IsMatch(str.Trim());
        }

        /// <summary>
        /// 检验是否为数字
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为数字：true代表是，false代表否</returns>
        public static bool IsNumber(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"^[+-]?[0123456789]*[.]?[0123456789]*$");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为日期时间
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为日期时间：true代表是，false代表否</returns>
        public static bool IsDateTime(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"^[ ]*[012 ]?[0123456789]?[0123456789]{2}[ ]*[-]{1}[ ]*[01]?[0123456789]{1}[ ]*[-]{1}[ ]*[0123]?[0123456789]{1}[ ]*[012]?[0123456789]{1}[ ]*[:]{1}[ ]*[012345]?[0123456789]{1}[ ]*[:]{1}[ ]*[012345]?[0123456789]{1}[ ]*$");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为邮政编码
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为邮政编码：true代表是，false代表否</returns>
        public static bool IsPostCode(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"^[0123456789]{6}$");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为身份证号
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为身份证号：true代表是，false代表否</returns>
        public static bool IsCode(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"^[0123456789]{15,18}$");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为电子邮件
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为电子邮件：true代表是，false代表否</returns>
        public static bool IsEMail(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为中国地区的电话号码
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为中国地区的电话号码：true代表是，false代表否</returns>
        public static bool IsPhoneNumber(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为汉字
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为汉字：true代表是，false代表否</returns>
        public static bool IsChinese(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"u4e00-u9fa5");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为双字节字符(包括汉字)
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为双字节字符：true代表是，false代表否</returns>
        public static bool IsDoubleByteChar(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"[^x00-xff]");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为URL地址
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为URL地址：true代表是，false代表否</returns>
        public static bool IsURLAddress(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"[a-zA-z]+://[^s]*");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 检验字符串是否为IP地址
        /// </summary>
        /// <param name="str">需要检验的字符串</param>
        /// <returns>是否为IP地址：true代表是，false代表否</returns>
        public static bool IsIPAddress(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return false;
            Regex rx = new Regex(@"d+.d+.d+.d+");
            return rx.IsMatch(str);
        }

        /// <summary>
        /// 清除字符串中的HTML标签(对于复杂的嵌套标签有时不准确)
        /// </summary>
        /// <param name="toEvaluate">指定的要被处理的字符串</param>
        /// <returns>清除HTML标签后的字符串</returns>
        public static string RemoveHtmlTags(this string str)
        {
            if (string.IsNullOrEmpty(str))
                return "";
            Regex rx = new Regex(@"s/<[a-zA-Z/][^>]*>//g", RegexOptions.IgnoreCase);

            return rx.Replace(str, "");
        }

        #endregion




    }
